package com.itheima.common;

import com.itheima.exception.ClientException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.*;

/**
 * @Author zhouxiangyang
 * @Date 2022/6/14 14:35
 */
//@ControllerAdvice  //表示该类是一个异常处理类，类中的方法用来处理各种异常
//@ResponseBody
@RestControllerAdvice  //等价于@ControllerAdvice+@ResponseBody
@Slf4j
public class GlobalExceptionHandler {

    /**
     * 处理服务器端
     * @ExceptionHandler(Exception.class) ：该方法是一个处理异常的方法
     *      注解参数表示该方法要处理的异常类型，可以省略不写，如果不写就表示处理方法参数对应的异常
     * @param e 要处理的异常对象，也就是接收到的异常对象
     * @return
     */
    //@ExceptionHandler(Exception.class)
    @ExceptionHandler  //处理和方法形参同类型的异常
    @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)  //有的时候别人没有指定响应码。
    public Result doException(Exception e){  //Exception e=new RuntimeException(field + defaultMessage)
        ////将来需要将后台异常保存到数据库，其他系统，文件中，通知开发人员尽快修复，给用户返回一个友好的提示信息
        log.info("接收到的异常是： {}", e.getMessage());
        //向客户端返回结果
        return new Result(500,"系统正在维护，请耐心等待O(∩_∩)O~~",null);
    }

    /**
     * 处理客户端异常
     * @param e
     * @return
     */
    @ExceptionHandler  //处理和方法形参同类型的异常
    //@ResponseStatus(HttpStatus.BAD_REQUEST)
    public Result doClientException(ClientException e){  //ClientException e=new ClientException(field + defaultMessage)
        log.info("接收到的异常是： {}", e.getMessage());
        //向客户端返回结果
        return new Result(400,e.getMessage(),null);
    }
}
